package com.lml.jdk8.localdate.java8Time;

import org.junit.jupiter.api.Test;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

/**
 * @author luomingliang
 * @date 2021/9/12 23:07
 */
public class Java8TimeFormatAndParseDemo {

    //LocalDateTime转换为字符串
    //字符串转换为LocalDateTime
    @Test
    public void test01() {
        //对LocalDateTime进行格式化和解析，初始化LocalDateTime对象
        LocalDateTime now = LocalDateTime.now();
        //now对象可以直接调用format方法进行格式化
        String s1 = now.format(DateTimeFormatter.ISO_DATE);
        String s2 = now.format(DateTimeFormatter.ISO_DATE_TIME);
        System.out.println("LocalDateTime:" + now);
        System.out.println("ISO_DATE格式化后的String是：" + s1);
        System.out.println("ISO_DATE_TIME格式化后的String是：" + s2);

        //解析字符串的方式通过LocalDateTime类的静态方法parse方法传入需要解析的字符串即可
        LocalDateTime time = LocalDateTime.parse(s1);
        System.out.println(time);
    }

    //LocalDateTime的格式化
    @Test
    public void test02() {
        LocalDateTime localDateTime = LocalDateTime.now();
        //通过DateTimeFormatter的ofLocalizedDate指定解析格式
        String fullStr = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
        String longStr = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
        String mediumStr = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));
        String shortStr = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));

        System.out.println("FULL：" + fullStr);
        System.out.println("LONG：" + longStr);
        System.out.println("MEDIUM：" + mediumStr);
        System.out.println("SHORT：" + shortStr);

        /*
         * FULL:全显示（年月日+星期） 例：2021年9月12日 星期日
         * LONG：全显示（年月日） 例：2021年9月12日
         * MEDIUM：缩略显示（没有年月日汉字） 例：21-9-12
         * SHORT：精简显示（精简年+月日） 例：2021-9-12
         */
    }

    //自定义格式化器
    @Test
    public void test03() {
        LocalDateTime now = LocalDateTime.now();
        //通过DateTimeFormatter提供的ofPattern方法自定义格式化方式
        String formatStr = now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss:SSS"));
        System.out.println("LocalDateTime格式化之后是：" + formatStr);
    }

    //练习
    //将1998年3月18日17时19分28秒格式化为以下格式 1998年-03月-18日---17:19分28秒
    @Test
    public void practice() {
        LocalDateTime dateTime = LocalDateTime.of(1998, 3, 18, 17, 19, 28);
        String formatStr = dateTime.format(DateTimeFormatter.ofPattern("yyyy年-MM月-dd日---HH:mm分ss秒"));
        System.out.println("LocalDateTime格式化之后是：" + formatStr);
    }
}
